# Contributor: Duncan Bellamy <dunk@denkimushi.com>
# Contributor: Łukasz Jendrysik <scadu@yandex.com>
# Contributor: Timo Teras <timo.teras@iki.fi>
# Maintainer: Timo Teras <timo.teras@iki.fi>
pkgname=asterisk
pkgver=16.12.0
pkgrel=0
pkgdesc="Asterisk: A Module Open Source PBX System"
pkgusers="asterisk"
pkggroups="asterisk"
url="http://www.asterisk.org/"
arch="all"
license="GPL-2.0-only"
options="!check"  # Test suite is separate, and require separate build
makedepends="findutils tar bsd-compat-headers libtool
	ncurses-dev popt-dev newt-dev zlib-dev libedit-dev tiff-dev curl-dev
	openssl-dev lua-dev libcap-dev jansson-dev util-linux-dev
	sqlite-dev postgresql-dev unixodbc-dev freetds-dev mariadb-connector-c-dev
	alsa-lib-dev pjproject-dev dahdi-tools-dev libpri-dev libsrtp-dev
	spandsp-dev libresample speex-dev speexdsp-dev libogg-dev
	bluez-dev libxml2-dev imap-dev unbound-dev"
install="$pkgname.pre-install $pkgname.pre-upgrade"
subpackages="$pkgname-dbg $pkgname-dev $pkgname-doc $pkgname-pgsql $pkgname-odbc
	$pkgname-tds $pkgname-fax $pkgname-sample-config:config:noarch
	$pkgname-sounds-moh:sound_moh:noarch $pkgname-sounds-en:sound_en:noarch
	$pkgname-mobile $pkgname-curl:_curl $pkgname-srtp $pkgname-dahdi
	$pkgname-speex $pkgname-alsa $pkgname-cdr-mysql:cdr_mysql $pkgname-openrc"

_download="https://downloads.asterisk.org/pub/telephony/asterisk/releases"
source="$_download/asterisk-$pkgver.tar.gz
	https://dev.alpinelinux.org/~tteras/asterisk-addon-mp3-r201.patch.gz
	10-musl-mutex-init.patch
	20-musl-astmm-fix.patch
	30-asterisk-mariadb.patch
	40-asterisk-cdefs.patch
	asterisk.initd
	asterisk.confd
	asterisk.logrotate"

# secfixes:
#   16.6.2-r0:
#     - CVE-2019-18610
#     - CVE-2019-18790
#   16.5.1-r0:
#     - CVE-2019-15297
#     - CVE-2019-15639
#   16.4.1-r0:
#     - CVE-2019-12827
#   16.3.0-r0:
#     - CVE-2019-7251
#   15.7.1-r0:
#     - CVE-2018-19278

prepare() {
	default_prepare

	# asteriskssl does not have direct references to libssl, but looks up
	# symbols from it using dlsym(RTLD_NEXT), so use --no-as-needed for it.
	sed -i -e 's/ASTSSL_LIBS:=$(OPENSSL_LIB)/ASTSSL_LIBS:=-Wl,--no-as-needed $(OPENSSL_LIB) -Wl,--as-needed/g' main/Makefile
}

build() {
	SHA1SUM="$PWD"/build_tools/sha1sum-sh ./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--mandir=/usr/share/man \
		--infodir=/usr/share/info \
		--libdir=/usr/lib \
		--localstatedir=/var \
		--disable-xmldoc \
		--enable-permanent-dlopen \
		--with-gsm=internal \
		--with-popt \
		--with-z \
		--with-newt \
		--with-unixodbc \
		--with-postgres \
		--with-tds \
		--with-dahdi \
		--with-pri \
		--with-tonezone \
		--with-resample \
		--with-sqlite3 \
		--with-speex \
		--with-asound \
		--without-x11 \
		--without-pjproject-bundled \
		--with-spandsp \
		--with-bluetooth \
		--with-libcurl \
		--with-libedit \
		--with-srtp \
		--with-imap=system \
		CFLAGS="$CFLAGS -DENABLE_SRTP_AES_256"

	# get default modules to build
	rm -f menuselect.makeopts
	make menuselect.makeopts

	# and add the non-default modules we need
	./menuselect/menuselect \
		--enable chan_mobile \
		--enable app_meetme \
		--enable cdr_mysql \
		--disable BUILD_NATIVE \
		--enable IMAP_STORAGE \
		menuselect.makeopts

	# build
	make LDCONFIG=
}

package() {
	make -j1 DESTDIR="$pkgdir" LDCONFIG_FLAGS="-n" install

	install -d "$pkgdir"/var/run/asterisk
	install -d "$pkgdir"/var/lib/asterisk

	install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
	install -m644 -D "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname
	install -m644 -D "$srcdir"/$pkgname.logrotate \
		"$pkgdir"/etc/logrotate.d/$pkgname

	chown -R asterisk:asterisk "$pkgdir"/var/*/asterisk
	chown -R asterisk:asterisk "$pkgdir"/etc/asterisk
	chmod -R u=rwX,g=rX,o= "$pkgdir"/etc/asterisk
}

dev() {
	default_dev
	depends="asterisk"

	# move back the /usr/lib/libasteriskssl.so symlink, asterisk needs it
	# see http://bugs.alpinelinux.org/issues/6393
	mv "$subpkgdir"/usr/lib/libasteriskssl.so "$pkgdir"/usr/lib/libasteriskssl.so
}

pgsql() { amove usr/lib/asterisk/modules/*_pgsql*; }
odbc() { amove usr/lib/asterisk/modules/*_odbc*; }
tds() { amove usr/lib/asterisk/modules/*_tds*; }
fax() { amove usr/lib/asterisk/modules/*_fax*; }
mobile() { amove usr/lib/asterisk/modules/*_mobile*; }
_curl() { amove usr/lib/asterisk/modules/*_curl*; }
cdr_mysql() { amove usr/lib/asterisk/modules/*cdr_mysql*; }
srtp() { amove usr/lib/asterisk/modules/*_srtp*; }
dahdi() { amove usr/lib/asterisk/modules/*_dahdi*; }
speex() { amove usr/lib/asterisk/modules/*_speex*; }
alsa() { amove usr/lib/asterisk/modules/*_alsa*; }

config() {
	pkgdesc="Sample configuration files for asterisk"
	cd "$builddir"
	mkdir -p "$subpkgdir"/var/lib/asterisk/phoneprov
	make -j1 samples DESTDIR="$subpkgdir"

	chown -R asterisk:asterisk "$subpkgdir"/var/*/asterisk
	chown -R asterisk:asterisk "$subpkgdir"/etc/asterisk
	chmod -R u=rwX,g=rX,o= "$subpkgdir"/etc/asterisk
}

sound_moh() {
	pkgdesc="Default on-hold music files for asterisk"
	depends=
	amove var/lib/asterisk/moh
	chown -R asterisk:asterisk "$subpkgdir"/var/*/asterisk
}

sound_en() {
	pkgdesc="English sound files for asterisk"
	depends=
	amove var/lib/asterisk/sounds/en
	chown -R asterisk:asterisk "$subpkgdir"/var/*/asterisk
}

sha512sums="1fc41b92d070efd4a7ea5db1a36c83bdb6dbbe7d9b5087b0a887ba3d6875e81ba1b71a79b216138b242f0349a176baf6745480ff6fb7ed47c62dda4b09b6a891  asterisk-16.12.0.tar.gz
aacef3f4796fb1abd33266998b53909cb4b36e7cc5ad2f7bac68bdc43e9a9072d9a4e2e7e681bddfa31f3d04575eb248afe6ea95da780c67e4829c1e22adfe1b  asterisk-addon-mp3-r201.patch.gz
771237ba6d42ab62d914f2702234b23fd0bc8c22f2aa33b0e745c9170163c8046f6d48ecb299faab3d6fb397f1aa046421083c3cc88510c9779861c522f357dd  10-musl-mutex-init.patch
0fae11b42894ab3d405bc50e9275b9084712b482fbf9b4259ea938667fc5cbe413655f3ff83da0f607151bb2b6e49c2f741b5ada6944dbb478f076ef8d86380a  20-musl-astmm-fix.patch
a43239189a1170d23d8f99d7658d8e064d4cc8149dd92d68e80d7af7a8fe181e0b111860ab13f12a91172c1e7f370c1a86679081b9ced98f4932fdfc64f04a49  30-asterisk-mariadb.patch
ba33f11169284f190b7dabab1da7d2751cb65d7976408db635a892fa17d7552e1660350017e7aada3464ecc7d9d6e99d6ad76d66c0036de062a386cffbc948e6  40-asterisk-cdefs.patch
0044c5db468ec8f2385d18d476f89976f6d036448583a4ef8017ce7a6f8f72105337e6b20037ffe47f561d2877fc9c86720aef23ab037df89b36dc140a5924c4  asterisk.initd
ab6b6f08ff43268cbb1abb7ed7d678949991ba495682a644bbaeb017d6adbff0a43297905fd73ae8db1786a28d5b5904f1bc253209a0e388c8a27f26c6ce14ed  asterisk.confd
7591d2faf539d05d9ee4e431c78a5e20686721fd79221ad94dffeeaff9282220b09cb9aec214bd7a8d12affaec0276c9c91e6e21af8b6712c0a9502b60b02f2b  asterisk.logrotate"
